<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
1.什么叫面向对象
	面向对象是一种思想
		把解决问题的关注点放到解决问题所需要的一系列对象上
	面向过程是一种思想
		把解决问题的关注点放到解决问题的每一个详细的步骤上
		
2.面向对象的三大特性
	封装
	继承
	多态
	
3.什么是对象
	万物皆对象
	
4.什么是js中的对象
	键值对儿的集合（无序）
	
5.名词提炼法
	一句话中的所有名词都可以被当做对象
	
6.如何用js对象模拟现实生活中的对象
	属性对应特征
	方法对应行为
	
7.创建对象的方式
	使用字面量
	使用内置的构造函数	Object
	封装简单工厂函数	（不推荐用）
	自定义构造函数

8.传统构造函数中存在的问题
	如果把方法定义在构造函数中，每创建一个对象，都会新建一个方法，这样
	同样的代码会在内存中存在多份，造成资源浪费
	
9.如何解决问题
	把方法提取出来定义在全局中，在构造函数中引用该函数
	使用原型来解决，原型中的所有成员都可以被所有跟其相关联的对象访问
	
10.原型是什么
	在构造函数创建的时候，系统默认地为这个构造函数创建并关联一个对象，
	这个对象就是原型对象
	这个对象默认是一个空对象，该对象中的所有成员可以被所有通过该构造
	函数实例化出来的对象访问
	
11.原型的作用
	该对象（原型）中的成员可以被所有通过该构造函数实例化出来的对象访问
	
12.原型的使用方式（实现原型继承的方式）
	1.利用对象的动态特性给原型对象添加成员
	2.直接替换原型对象
	3.通过混入的方式给原型对象添加成员
	
13.原型链
	每一个构造函数都有原型对象，每一个对象都有构造函数，原型对象
	是一个对象，因此就形成一个链式的结构，称之为原型链

14.继承的实现方式
	1.混入式继承 for-in
	2.原型继承	通过更改原型链结构实现的继承，就是原型继承
	3.经典继承，Object.create() 有兼容性问题
		// let 对象名 = Object.create(要继承的对象)
		
15.Object.prototype的成员
	constructor 属性 指向该原型相关的构造函数
	hasOwnProperty() 方法 判断对象本身是否拥有某个属性 
	obj.hasOwnProperty("属性名")
	isPrototypeof() 方法 判断一个对象是不是另一个对象的原型对象
	原型对象obj1.isPrototypeof(object2)
	propertyIsEnumerable() 方法 先判断属性是否属于对象本身，如果不是
	返回false，如果是，就继续判断属性是否可以给遍历，如果是才返回true
	，反之则false
	toString toLocaleString 方法 转换成字符串
	toLocaleString转换成本地格式的字符串
	valueOf 方法 当对象参与运算的时候，会首先调用valueOf方法
	获取对象的值，如果获取的值不能参与运算，则调用toString方法
	__proto__属性 指向对象关联的原型对象
	
16.Function eval
	都可以将字符串转换成代码
	不同点
		Function创建出来的是函数，不会直接去调用，需要手动调用
		eval 直接可以将字符串装换成代码，并执行
	
17.arguments
	函数内部的一个对象，在函数调用的时候，系统会默认地将所有传入的实参
	存入该对象
	arguments.length 表示传入实参的数量
	arguments.callee 指向当前函数（匿名函数中使用，因为他没有名字）
</body>
</html>